home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / strpp300.zip / REGEXP.H < prev    next >
C/C++ Source or Header  |  1993-04-11  |  3KB  |  92 lines

  1. /* -------------------------------------------------------------------- */
  2. /* String++ Version 3.00                                       04/10/93 */
  3. /*                                                                      */
  4. /* Enhanced string class for Turbo C++/Borland C++.                     */
  5. /* Copyright 1991-1993 by Carl W. Moreland                              */
  6. /*                                                                      */
  7. /* Derived from code Copyright 1988, Jim Mischel.  All rights reserved. */
  8. /* regexp.h                                                             */
  9. /* -------------------------------------------------------------------- */
  10.  
  11. #ifndef _REGEXP_H
  12. #define _REGEXP_H
  13.  
  14. #if defined (__ZTC__)
  15. #include <stream.hpp>            // Zortech
  16. #else
  17. #include <iostream.h>            // Borland
  18. #endif
  19.  
  20. #include "parsestr.h"
  21.  
  22. extern int RSTART;
  23. extern int RLENGTH;
  24. extern int NF;
  25.  
  26. class RegExp
  27. {
  28. private:
  29.   ParseString reExpression;        // holds the regular expression
  30.   String      rePattern;        // holds the compiled version
  31.   char* reLastChar;            // used in Match... functions
  32.  
  33.   const char* MakePattern(void);    // entry point to compile pattern
  34.   const char* ParseExpression(String&);
  35.   const char* ParseTerm(String&);
  36.   const char* ParseFactor(String&);
  37.   char        ParseEscape(void);
  38.   int         ParseClosure(String&);
  39.   const char* ParseCCL(String&);
  40.   const char* ParseDASH(String&, char);
  41.  
  42.   int         IsFactor(void);
  43.   const char* SkipTerm(char* pattern);
  44.  
  45.   int Match(const char*, const char*);    // entry point to match expression
  46.   int MatchTerm(int, char*, char*);
  47.   int MatchOR(int, char*, char*);
  48.   int Match_0_1(int, char*, char*);
  49.   int MatchClosure(int, char*, char*, char*);
  50.   int MatchCCL(char, char*);
  51.  
  52. public:
  53.   RegExp(void) {}
  54.   RegExp(const String&);
  55.  
  56.   operator const char*()   { return reExpression(); }
  57.   const char* operator()() { return reExpression(); }
  58.   void operator=(const char*);
  59.   void operator=(const String&);
  60.  
  61.   friend const char* SetFS(const String& s);
  62.   friend int match(const String&, RegExp&);
  63.   friend int operator==(const String& s, RegExp& re);
  64.   friend int operator!=(const String& s, RegExp& re);
  65.   friend ostream& operator<<(ostream&, const RegExp&);
  66. };
  67.  
  68. typedef RegExp Regexp;            // allow the use of Regexp
  69. extern RegExp FS;
  70.  
  71. inline int operator==(const String& s, RegExp& re)
  72. {
  73.   return (re.Match(s, re.rePattern) == -1) ? 0 : 1;
  74. }
  75.  
  76. inline int operator!=(const String& s, RegExp& re)
  77. {
  78.   return (re.Match(s, re.rePattern) == -1) ? 1 : 0;
  79. }
  80.  
  81. inline int match(const String& s, RegExp& re)
  82. {
  83.   return re.Match(s, re.rePattern);
  84. }
  85.  
  86. int sub(RegExp& from, const String& to, String& str);
  87. int gsub(RegExp& from, const String& to, String& str, unsigned count=10000);
  88. int split(const String& s, String*& a, const RegExp& fs);
  89. int index(const String& s, const RegExp& t);
  90.  
  91. #endif
  92.